home *** CD-ROM | disk | FTP | other *** search
Wrap
SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) NNNNAAAAMMMMEEEE SSSSGGGGBBBBMMMMVVVV, DDDDGGGGBBBBMMMMVVVV, CCCCGGGGBBBBMMMMVVVV, ZZZZGGGGMMMMBBBBVVVV - Multiplies a real or complex vector by a real or complex general band matrix SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS Single precision Fortran: CCCCAAAALLLLLLLL SSSSGGGGBBBBMMMMVVVV ((((_t_r_a_n_s,,,, _m,,,, _n,,,, _k_l,,,, _k_u,,,, _a_l_p_h_a,,,, _a,,,, _l_d_a,,,, _x,,,, _i_n_c_x,,,, _b_e_t_a,,,, _y,,,, _i_n_c_y)))) C/C++: ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd ssssggggbbbbmmmmvvvv((((cccchhhhaaaarrrr *_t_r_a_n_s_a,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, iiiinnnntttt _k_l,,,, iiiinnnntttt _k_u,,,, ffffllllooooaaaatttt _a_l_p_h_a,,,, ffffllllooooaaaatttt *_a,,,, iiiinnnntttt _l_d_a,,,, ffffllllooooaaaatttt *_x,,,, iiiinnnntttt _i_n_c_x,,,, ffffllllooooaaaatttt _b_e_t_a,,,, ffffllllooooaaaatttt *_y,,,, iiiinnnntttt _i_n_c_y))));;;; Double precision Fortran: CCCCAAAALLLLLLLL DDDDGGGGBBBBMMMMVVVV ((((_t_r_a_n_s,,,, _m,,,, _n,,,, _k_l,,,, _k_u,,,, _a_l_p_h_a,,,, _a,,,, _l_d_a,,,, _x,,,, _i_n_c_x,,,, _b_e_t_a,,,, _y,,,, _i_n_c_y)))) C/C++: ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd ddddggggbbbbmmmmvvvv((((cccchhhhaaaarrrr *_t_r_a_n_s_a,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, iiiinnnntttt _k_l,,,, iiiinnnntttt _k_u,,,, ddddoooouuuubbbblllleeee _a_l_p_h_a,,,, ddddoooouuuubbbblllleeee *_a,,,, iiiinnnntttt _l_d_a,,,, ddddoooouuuubbbblllleeee *_x,,,, iiiinnnntttt _i_n_c_x,,,, ddddoooouuuubbbblllleeee _b_e_t_a,,,, ddddoooouuuubbbblllleeee *_y,,,, iiiinnnntttt _i_n_c_y))));;;; Single precision complex Fortran: CCCCAAAALLLLLLLL CCCCGGGGBBBBMMMMVVVV ((((_t_r_a_n_s,,,, _m,,,, _n,,,, _k_l,,,, _k_u,,,, _a_l_p_h_a,,,, _a,,,, _l_d_a,,,, _x,,,, _i_n_c_x,,,, _b_e_t_a,,,, _y,,,, _i_n_c_y)))) C/C++: ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd ccccggggbbbbmmmmvvvv((((cccchhhhaaaarrrr *_t_r_a_n_s_a,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, iiiinnnntttt _k_l,,,, iiiinnnntttt _k_u,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_a_l_p_h_a,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_a,,,, iiiinnnntttt _l_d_a,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_x,,,, iiiinnnntttt _i_n_c_x,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_b_e_t_a,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_y,,,, iiiinnnntttt _i_n_c_y))));;;; C++ STL: ####iiiinnnncccclllluuuuddddeeee <<<<ccccoooommmmpppplllleeeexxxx....hhhh>>>> ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd ccccggggbbbbmmmmvvvv((((cccchhhhaaaarrrr *_t_r_a_n_s_a,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, iiiinnnntttt _k_l,,,, iiiinnnntttt _k_u,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_a_l_p_h_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_a,,,, iiiinnnntttt _l_d_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_x,,,, iiiinnnntttt _i_n_c_x,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_b_e_t_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_y,,,, iiiinnnntttt _i_n_c_y))));;;; Double precision complex PPPPaaaaggggeeee 1111 SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) Fortran: CCCCAAAALLLLLLLL ZZZZGGGGBBBBMMMMVVVV ((((_t_r_a_n_s,,,, _m,,,, _n,,,, _k_l,,,, _k_u,,,, _a_l_p_h_a,,,, _a,,,, _l_d_a,,,, _x,,,, _i_n_c_x,,,, _b_e_t_a,,,, _y,,,, _i_n_c_y)))) C/C++: ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd zzzzggggbbbbmmmmvvvv((((cccchhhhaaaarrrr *_t_r_a_n_s_a,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, iiiinnnntttt _k_l,,,, iiiinnnntttt _k_u,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_a_l_p_h_a,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_a,,,, iiiinnnntttt _l_d_a,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_x,,,, iiiinnnntttt _i_n_c_x,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_b_e_t_a,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_y,,,, iiiinnnntttt _i_n_c_y))));;;; C++ STL: ####iiiinnnncccclllluuuuddddeeee <<<<ccccoooommmmpppplllleeeexxxx....hhhh>>>> ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd zzzzggggbbbbmmmmvvvv((((cccchhhhaaaarrrr *_t_r_a_n_s_a,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, iiiinnnntttt _k_l,,,, iiiinnnntttt _k_u,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_a_l_p_h_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_a,,,, iiiinnnntttt _l_d_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_x,,,, iiiinnnntttt _i_n_c_x,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_b_e_t_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_y,,,, iiiinnnntttt _i_n_c_y))));;;; IIIIMMMMPPPPLLLLEEEEMMMMEEEENNNNTTTTAAAATTTTIIIIOOOONNNN These routines are part of the SCSL Scientific Library and can be loaded using either the ----llllssssccccssss or the ----llllssssccccssss____mmmmpppp option. The ----llllssssccccssss____mmmmpppp option directs the linker to use the multi-processor version of the library. When linking to SCSL with ----llllssssccccssss or ----llllssssccccssss____mmmmpppp, the default integer size is 4 bytes (32 bits). Another version of SCSL is available in which integers are 8 bytes (64 bits). This version allows the user access to larger memory sizes and helps when porting legacy Cray codes. It can be loaded by using the ----llllssssccccssss____iiii8888 option or the ----llllssssccccssss____iiii8888____mmmmpppp option. A program may use only one of the two versions; 4-byte integer and 8-byte integer library calls cannot be mixed. The C and C++ prototypes shown above are appropriate for the 4-byte integer version of SCSL. When using the 8-byte integer version, the variables of type iiiinnnntttt become lllloooonnnngggg lllloooonnnngggg and the <<<<ssssccccssssllll____bbbbllllaaaassss____iiii8888....hhhh>>>> header file should be included. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN SSSSGGGGBBBBMMMMVVVV and DDDDGGGGBBBBMMMMVVVV multiply a real vector by a real general band matrix. CCCCGGGGBBBBMMMMVVVV and ZZZZGGGGBBBBMMMMVVVV multiply a complex vector by a complex general band matrix. These routines perform one of the following matrix-vector operations: _y <- _a_l_p_h_a _A_x + _b_e_t_a _y _y <- _a_l_p_h_a _A_T_x + _b_e_t_a _y _y <- _a_l_p_h_a _A_H_x + _b_e_t_a _y PPPPaaaaggggeeee 2222 SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) where * _a_l_p_h_a and _b_e_t_a are scalars, * _x and _y are vectors * _A is an _m-by-_n band matrix with _k_l subdiagonals and _k_u superdiagonals * _A_T is the transpose of _A * _A_H is the conjugate transpose of _A See the NOTES section of this man page for information about the interpretation of the data types described in the following arguments. These routines have the following arguments: _t_r_a_n_s Character. (input) Specifies the operation to be performed: _t_r_a_n_s = 'N' or 'n': _y <- _a_l_p_h_a _A_x + _b_e_t_a _y _t_r_a_n_s = 'T' or 't': _y <- _a_l_p_h_a _A_T_x + _b_e_t_a _y _t_r_a_n_s = 'C' or 'c': _y <- _a_l_p_h_a _A_T_x + _b_e_t_a _y (SSSSGGGGBBBBMMMMVVVV, DDDDGGGGBBBBMMMMVVVV) or _y <- _a_l_p_h_a _A_H_x + _b_e_t_a _y (CCCCGGGGBBBBMMMMVVVV, ZZZZGGGGBBBBMMMMVVVV) For C/C++, a pointer to this character is passed. _m Integer. (input) Specifies the number of rows in matrix _A. _m >= 0. _n Integer. (input) Specifies the number of columns in the matrix _A. _n >= 0. _k_l Integer. (input) Specifies the number of subdiagonals of matrix _A. _k_l >= 0. _k_u Integer. (input) Specifies the number of superdiagonals of matrix _A. _k_u >= 0. _a_l_p_h_a Scalar alpha. (input) SSSSGGGGBBBBMMMMVVVV: Single precision. DDDDGGGGBBBBMMMMVVVV: Double precision. CCCCGGGGBBBBMMMMVVVV: Single precision complex. ZZZZGGGGBBBBMMMMVVVV: Double precision complex. PPPPaaaaggggeeee 3333 SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) For C/C++, a pointer to this scalar is passed when alpha is complex; otherwise, alpha is passed by value. _a Array of dimension (_l_d_a, _n). (input) SSSSGGGGBBBBMMMMVVVV: Single precision array. DDDDGGGGBBBBMMMMVVVV: Double precision array. CCCCGGGGBBBBMMMMVVVV: Single precision complex array. ZZZZGGGGBBBBMMMMVVVV: Double precision complex array. Before entry, the leading (_k_l+_k_u+1)-by-_n part of array _a must contain the matrix of coefficients, supplied column-by-column, with the leading diagonal of the matrix in row (_k_u+1) of the array, the first superdiagonal starting at position 2 in row _k_u, the first subdiagonal starting at position 1 in row (_k_u+2), and so on. Elements in array _a that do not correspond to elements in the band matrix (such as the top left _k_u-by-_k_u triangle) are not referenced. See the NOTES section for an example of Fortran code that transfers a band matrix from conventional full matrix storage to band storage. _l_d_a Integer. (input) Specifies the first dimension of _a as declared in the calling program. _l_d_a >= (_k_l+_k_u+1). _x Array of dimension 1+(_k_x-1) * |_i_n_c_x|. (input) SSSSGGGGBBBBMMMMVVVV: Single precision array. DDDDGGGGBBBBMMMMVVVV: Double precision array. CCCCGGGGBBBBMMMMVVVV: Single precision complex array. ZZZZGGGGBBBBMMMMVVVV: Double precision complex array. Contains the vector _x. When _t_r_a_n_s = 'N' or 'n', _k_x is _n; otherwise, it is _m. _i_n_c_x Integer. (input) Specifies the increment for the elements of _x. _i_n_c_x must not be 0. _b_e_t_a Scalar beta. (input) SSSSGGGGBBBBMMMMVVVV: Single precision. DDDDGGGGBBBBMMMMVVVV: Double precision. CCCCGGGGBBBBMMMMVVVV: Single precision complex. ZZZZGGGGBBBBMMMMVVVV: Double precision complex. When _b_e_t_a is supplied as 0, _y need not be set on input. For C/C++, a pointer to this scalar is passed when beta is complex; otherwise, beta is passed by value. _y Array of dimension 1+(_k_y-1) * |_i_n_c_y|. (input and output) SSSSGGGGBBBBMMMMVVVV: Single precision array. DDDDGGGGBBBBMMMMVVVV: Double precision array. CCCCGGGGBBBBMMMMVVVV: Single precision complex array. PPPPaaaaggggeeee 4444 SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) ZZZZGGGGBBBBMMMMVVVV: Double precision complex array. Contains the vector _y. When _t_r_a_n_s = 'N' or 'n', _k_y is _m; otherwise, it is _n. On exit, the updated vector overwrites array _y. _i_n_c_y Integer. (input) Specifies the increment for the elements of _y. _i_n_c_y must not be 0. NNNNOOOOTTTTEEEESSSS The following program segment transfers a band matrix from conventional full matrix storage to band storage: DO 20, J = 1, N K = KU + 1 - J DO 10, I = MAX(1, J - KU), MIN(M, J + KL) A(K + I, J) = MATRIX(I, J) 10 CONTINUE 20 CONTINUE SSSSGGGGBBBBMMMMVVVV, DDDDGGGGBBBBMMMMVVVV, ZZZZGGGGBBBBMMMMVVVV and CCCCGGGGBBBBMMMMVVVV are Level 2 Basic Linear Algebra Subprograms (Level 2 BLAS). When working backward (_i_n_c_x < 0 or _i_n_c_y < 0), each routine starts at the end of the vector and moves backward, as follows: _x(1-_i_n_c_x * _n-1)), _x(1-_i_n_c_x * (_n-2)) , ..., _x(1) _y(1-_i_n_c_y * (_n-1)), _y(1-_i_n_c_y * (_n-2)) , ..., _y(1) DDDDaaaattttaaaa TTTTyyyyppppeeeessss The following data types are described in this documentation: TTTTeeeerrrrmmmm UUUUsssseeeedddd DDDDaaaattttaaaa ttttyyyyppppeeee Fortran: Array dimensioned _n xxxx((((nnnn)))) Array of dimensions (_m,_n) xxxx((((mmmm,,,,nnnn)))) Character CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR Integer IIIINNNNTTTTEEEEGGGGEEEERRRR (IIIINNNNTTTTEEEEGGGGEEEERRRR****8888 for ----llllssssccccssss____iiii8888[[[[____mmmmpppp]]]]) Single precision RRRREEEEAAAALLLL Double precision DDDDOOOOUUUUBBBBLLLLEEEE PPPPRRRREEEECCCCIIIISSSSIIIIOOOONNNN PPPPaaaaggggeeee 5555 SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) Single precision complex CCCCOOOOMMMMPPPPLLLLEEEEXXXX Double precision complex DDDDOOOOUUUUBBBBLLLLEEEE CCCCOOOOMMMMPPPPLLLLEEEEXXXX C/C++: Array dimensioned _n xxxx[[[[_n]]]] Array of dimensions (_m,_n) xxxx[[[[mmmm****nnnn]]]] Character cccchhhhaaaarrrr Integer iiiinnnntttt (lllloooonnnngggg lllloooonnnngggg for ----llllssssccccssss____iiii8888[[[[____mmmmpppp]]]]) Single precision ffffllllooooaaaatttt Double precision ddddoooouuuubbbblllleeee Single precision complex ssssccccssssllll____ccccoooommmmpppplllleeeexxxx Double precision complex ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx C++ STL: Array dimensioned _n xxxx[[[[_n]]]] Array of dimensions (_m,_n) xxxx[[[[mmmm****nnnn]]]] Character cccchhhhaaaarrrr Integer iiiinnnntttt (lllloooonnnngggg lllloooonnnngggg for ----llllssssccccssss____iiii8888[[[[____mmmmpppp]]]]) Single precision ffffllllooooaaaatttt Double precision ddddoooouuuubbbblllleeee Single precision complex ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> Double precision complex ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> Note that you can explicitly declare multidimensional C/C++ arrays provided that the array dimensions are swapped with respect to the Fortran declaration (e.g., xxxx[[[[nnnn]]]][[[[mmmm]]]] in C/C++ versus xxxx((((mmmm,,,,nnnn)))) in Fortran). To avoid a compiler type mismatch error in C++ (or a compiler warning message in C), however, the array should be cast to a pointer of the appropriate type when passed as an argument to a SCSL routine. SSSSEEEEEEEE AAAALLLLSSSSOOOO IIIINNNNTTTTRRRROOOO____SSSSCCCCSSSSLLLL(3S), IIIINNNNTTTTRRRROOOO____BBBBLLLLAAAASSSS2222(3S) PPPPaaaaggggeeee 6666 SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) SSSSGGGGBBBBMMMMVVVV((((3333SSSS)))) IIIINNNNTTTTRRRROOOO____CCCCBBBBLLLLAAAASSSS(3S) for information about using the C interface to Fortran 77 Basic Linear Algebra Subprograms (legacy BLAS) set forth by the Basic Linear Algebra Subprograms Technical Forum. PPPPaaaaggggeeee 7777